# 操作文件和目录
import os
# 操作系统类型
print(os.name)  # 如果是posix，说明系统是Linux、Unix或Mac OS X，如果是nt，就是Windows系统。要获取详细的系统信息，可以调用uname()函数：uname()函数在Windows上不提供，也就是说，os模块的某些函数是跟操作系统相关
# 环境变量
print(os.environ)
print(os.environ.get('PATH'))  # 获取某个环境变量的值，可以调用os.environ.get('key')：
#操作文件和目录的函数一部分放在os模块中，一部分放在os.path模块中
print(os.path.abspath('.'))# 查看当前目录的绝对路径:
print(os.path.join('D:\\HWork\\PythonFile','day111'))# 在某个目录下创建一个新目录，首先把新目录的完整路径表示出来:
print(os.mkdir('D:/HWork/PythonFile/day111'))# 然后创建一个目录:
print(os.rmdir('D:/HWork/PythonFile/day111'))# 删掉一个目录:
#把两个路径合成一个时，不要直接拼字符串，而要通过os.path.join()函数，这样可以正确处理不同操作系统的路径分隔符。
print(os.path.split('D:\\HWork\\PythonFile\\day5\\w_test.txt'))
#同样的道理，要拆分路径时，也不要直接去拆字符串，而要通过os.path.split()函数，这样可以把一个路径拆分为两部分，后一部分总是最后级别的目录或文件名：
print(os.path.splitext('D:\\HWork\\PythonFile\\day5\\w_test.txt'))
#os.path.splitext()可以直接让你得到文件扩展名，很多时候非常方便：
# 对文件重命名:
#os.rename("D:\\HWork\\PythonFile\\day5\\r-test.txt",'D:\\HWork\\PythonFile\\day5\\r_test.txt')
# 删掉文件:
#os.remove('D:\\HWork\\PythonFile\\day5\\r_test.txt')

#过滤文件：列出当前目录下的所有目录
print([x for x in os.listdir('.') if os.path.isdir(x)])
#列出所有的.py文件
print([x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1]=='.py'])
#练习
#1、利用os模块编写一个能实现dir -l输出的程序。
#2、编写一个程序，能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件，并打印出相对路径。
import os 
def search_file(path,str):# 传入当前的绝对路径以及指定字符串
    ## 首先先找到当前目录下的所有文件
    for file in os.listdir(path):# os.listdir(path) 是当前这个path路径下的所有文件的列表
        this_path=os.path.join(path,file)
        if os.path.isfile(this_path):# 判断这个路径对应的是目录还是文件，是文件就走下去
            if str in file:
                print(this_path)
        else:# 不是就再次执行这个函数，递归下去
            search_file(this_path,str)# 递归下去
if __name__=='__main__':
    search_file(os.path.abspath("."),'.py')